home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / gfx / show / vmpeg.lha / src / writeframe.s < prev   
Encoding:
Text File  |  1999-07-06  |  11.1 KB  |  760 lines

  1.     .text
  2.  
  3.     .extern    _crv
  4.     .extern _cbu
  5.     .extern    _cgu
  6.     .extern    _cgv
  7.     .extern    _Clip
  8.  
  9.  
  10.  
  11.     .globl    _WriteFrame8
  12. _WriteFrame8:
  13. # r3 = source video buffer
  14. # r4 = CGfx frame buffer
  15. # r5 = bytes per row
  16. # r6 = width in bytes
  17. # r7 = height
  18.  
  19.     andi.    r8,r6,31
  20.     li    r11,-32
  21.     and    r6,r6,r11
  22. #    cmpw    r5,r6
  23. #    bge+    .bprok
  24. #    mr    r5,r6
  25. #.bprok:
  26.     sub    r5,r5,r6
  27.     srawi   r6,r6,5
  28.     subi    r3,r3,8
  29.     subi    r4,r4,8
  30. .loop:
  31.     mtctr   r6
  32. .loop2:
  33.     lfdu    f0,8(r3)
  34.     lfdu    f1,8(r3)
  35.     lfdu    f2,8(r3)
  36.     lfdu    f3,8(r3)
  37.     stfdu   f0,8(r4)
  38.     stfdu   f1,8(r4)
  39.     stfdu   f2,8(r4)
  40.     stfdu   f3,8(r4)
  41.     bdnz    .loop2
  42.     add    r3,r3,r8
  43.     add     r4,r4,r5
  44.     subic.  r7,r7,1
  45.     bne     .loop
  46.     blr
  47.  
  48.  
  49.     .globl    _WriteFrame15
  50. _WriteFrame15:
  51. # r3 = source ptr array: *src[3]
  52. # r4 = CGfx frame buffer
  53. # r5 = src width
  54. # r6 = src height
  55. # r7 = Cgfx bytes per row
  56. # r8 = Cgfx modulo
  57.  
  58.     .set    fb,r4
  59.     .set    width,r5
  60.     .set    height,r6
  61.     .set    bpr,r7
  62.     .set    modulo,r8
  63.     .set    py1,r9
  64.     .set    py2,r10
  65.     .set    pu,r11
  66.     .set    pv,r12
  67.     .set    d,r22
  68.     .set    c32768,r23
  69.     .set    Clip,r24
  70.     .set    y,r25
  71.     .set    u,r26
  72.     .set    v,r27
  73.     .set    crv,r28
  74.     .set    cbu,r29
  75.     .set    cgu,r30
  76.     .set    cgv,r31
  77.  
  78.     stwu    r1,-64(r1)
  79.     srwi    height,height,1
  80.     stw    r22,24(r1)
  81.     stw    r23,28(r1)
  82.     stw    r24,32(r1)
  83.     stw    r25,36(r1)
  84.     stw    r26,40(r1)
  85.     stw    r27,44(r1)
  86.     stw    r28,48(r1)
  87.     stw    r29,52(r1)
  88.     stw    r30,56(r1)
  89.     stw    r31,60(r1)
  90.     lis    c32768,32768@h
  91.     lwz    py1,0(r3)
  92.     ori    c32768,c32768,32768@l
  93.     lwz    pu,4(r3)
  94.     add    modulo,modulo,bpr
  95.     lwz    pv,8(r3)
  96.     subi    py1,py1,1
  97.     lwz    crv,_crv(r2)
  98.     subi    pu,pu,1
  99.     lwz    cbu,_cbu(r2)
  100.     subi    pv,pv,1
  101.     lwz    cgu,_cgu(r2)
  102.     add    py2,py1,width
  103.     lwz    cgv,_cgv(r2)
  104.     lwz    Clip,_Clip(r2)
  105.  
  106. .rowloop15:
  107.     srwi    r0,width,1
  108.     mtctr    r0
  109.  
  110. .colloop15:
  111.     lbzu    u,1(pu)
  112.     lbzu    v,1(pv)
  113.     subi    u,u,128
  114.     subi    v,v,128
  115.  
  116.     lbzu    y,1(py1)
  117.     li    d,0
  118.     subi    y,y,16
  119.     lis    r3,76309@h
  120.     ori    r3,r3,76309@l
  121.     mullw    y,y,r3
  122.     mullw    r3,crv,v
  123.     add    r3,r3,y
  124.     add    r3,r3,c32768
  125.     srawi    r0,r3,16
  126.     lbzx    r3,Clip,r0
  127.     rlwimi    d,r3,23,1,5
  128.     mullw    r3,cgu,u
  129.     mullw    r0,cgv,v
  130.     sub    r3,y,r3
  131.     sub    r3,r3,r0
  132.     add    r3,r3,c32768
  133.     srawi    r0,r3,16
  134.     lbzx    r3,Clip,r0
  135.     rlwimi    d,r3,18,6,10
  136.     mullw    r3,cbu,u
  137.     add    r3,r3,y
  138.     add    r3,r3,c32768
  139.     srawi    r0,r3,16
  140.     lbzx    r3,Clip,r0
  141.     rlwimi    d,r3,13,11,15
  142.  
  143.     lbzu    y,1(py1)
  144.     subi    y,y,16
  145.     lis    r3,76309@h
  146.     ori    r3,r3,76309@l
  147.     mullw    y,y,r3
  148.     mullw    r3,crv,v
  149.     add    r3,r3,y
  150.     add    r3,r3,c32768
  151.     srawi    r0,r3,16
  152.     lbzx    r3,Clip,r0
  153.     rlwimi    d,r3,7,17,21
  154.     mullw    r3,cgu,u
  155.     mullw    r0,cgv,v
  156.     sub    r3,y,r3
  157.     sub    r3,r3,r0
  158.     add    r3,r3,c32768
  159.     srawi    r0,r3,16
  160.     lbzx    r3,Clip,r0
  161.     rlwimi    d,r3,2,22,26
  162.     mullw    r3,cbu,u
  163.     add    r3,r3,y
  164.     add    r3,r3,c32768
  165.     srawi    r0,r3,16
  166.     lbzx    r3,Clip,r0
  167.     rlwimi    d,r3,29,27,31
  168.     stw    d,0(fb)
  169.  
  170.     lbzu    y,1(py2)
  171.     li    d,0
  172.     subi    y,y,16
  173.     lis    r3,76309@h
  174.     ori    r3,r3,76309@l
  175.     mullw    y,y,r3
  176.     mullw    r3,crv,v
  177.     add    r3,r3,y
  178.     add    r3,r3,c32768
  179.     srawi    r0,r3,16
  180.     lbzx    r3,Clip,r0
  181.     rlwimi    d,r3,23,1,5
  182.     mullw    r3,cgu,u
  183.     mullw    r0,cgv,v
  184.     sub    r3,y,r3
  185.     sub    r3,r3,r0
  186.     add    r3,r3,c32768
  187.     srawi    r0,r3,16
  188.     lbzx    r3,Clip,r0
  189.     rlwimi    d,r3,18,6,10
  190.     mullw    r3,cbu,u
  191.     add    r3,r3,y
  192.     add    r3,r3,c32768
  193.     srawi    r0,r3,16
  194.     lbzx    r3,Clip,r0
  195.     rlwimi    d,r3,13,11,15
  196.  
  197.     lbzu    y,1(py2)
  198.     subi    y,y,16
  199.     lis    r3,76309@h
  200.     ori    r3,r3,76309@l
  201.     mullw    y,y,r3
  202.     mullw    r3,crv,v
  203.     add    r3,r3,y
  204.     add    r3,r3,c32768
  205.     srawi    r0,r3,16
  206.     lbzx    r3,Clip,r0
  207.     rlwimi    d,r3,7,17,21
  208.     mullw    r3,cgu,u
  209.     mullw    r0,cgv,v
  210.     sub    r3,y,r3
  211.     sub    r3,r3,r0
  212.     add    r3,r3,c32768
  213.     srawi    r0,r3,16
  214.     lbzx    r3,Clip,r0
  215.     rlwimi    d,r3,2,22,26
  216.     mullw    r3,cbu,u
  217.     add    r3,r3,y
  218.     add    r3,r3,c32768
  219.     srawi    r0,r3,16
  220.     lbzx    r3,Clip,r0
  221.     rlwimi    d,r3,29,27,31
  222.     stwx    d,fb,bpr
  223.  
  224.     addi    fb,fb,4            # next column
  225.     bdnz    .colloop15
  226.  
  227.     add    fb,fb,modulo        # next row
  228.     subic.    height,height,1
  229.     add    py1,py1,width
  230.     add    py2,py2,width
  231.     bne    .rowloop15
  232.  
  233.     lwz    r22,24(r1)
  234.     lwz    r23,28(r1)
  235.     lwz    r24,32(r1)
  236.     lwz    r25,36(r1)
  237.     lwz    r26,40(r1)
  238.     lwz    r27,44(r1)
  239.     lwz    r28,48(r1)
  240.     lwz    r29,52(r1)
  241.     lwz    r30,56(r1)
  242.     lwz    r31,60(r1)
  243.     addi    r1,r1,64
  244.     blr
  245.  
  246.  
  247.     .globl    _WriteFrame16
  248. _WriteFrame16:
  249. # r3 = source ptr array: *src[3]
  250. # r4 = CGfx frame buffer
  251. # r5 = src width
  252. # r6 = src height
  253. # r7 = Cgfx bytes per row
  254. # r8 = Cgfx modulo
  255.  
  256.     .set    fb,r4
  257.     .set    width,r5
  258.     .set    height,r6
  259.     .set    bpr,r7
  260.     .set    modulo,r8
  261.     .set    py1,r9
  262.     .set    py2,r10
  263.     .set    pu,r11
  264.     .set    pv,r12
  265.     .set    d,r22
  266.     .set    c32768,r23
  267.     .set    Clip,r24
  268.     .set    y,r25
  269.     .set    u,r26
  270.     .set    v,r27
  271.     .set    crv,r28
  272.     .set    cbu,r29
  273.     .set    cgu,r30
  274.     .set    cgv,r31
  275.  
  276.     stwu    r1,-64(r1)
  277.     srwi    height,height,1
  278.     stw    r22,24(r1)
  279.     stw    r23,28(r1)
  280.     stw    r24,32(r1)
  281.     stw    r25,36(r1)
  282.     stw    r26,40(r1)
  283.     stw    r27,44(r1)
  284.     stw    r28,48(r1)
  285.     stw    r29,52(r1)
  286.     stw    r30,56(r1)
  287.     stw    r31,60(r1)
  288.     lis    c32768,32768@h
  289.     lwz    py1,0(r3)
  290.     ori    c32768,c32768,32768@l
  291.     lwz    pu,4(r3)
  292.     add    modulo,modulo,bpr
  293.     lwz    pv,8(r3)
  294.     subi    py1,py1,1
  295.     lwz    crv,_crv(r2)
  296.     subi    pu,pu,1
  297.     lwz    cbu,_cbu(r2)
  298.     subi    pv,pv,1
  299.     lwz    cgu,_cgu(r2)
  300.     add    py2,py1,width
  301.     lwz    cgv,_cgv(r2)
  302.     lwz    Clip,_Clip(r2)
  303.  
  304. .rowloop16:
  305.     srwi    r0,width,1
  306.     mtctr    r0
  307.  
  308. .colloop16:
  309.     lbzu    u,1(pu)
  310.     lbzu    v,1(pv)
  311.     subi    u,u,128
  312.     subi    v,v,128
  313.  
  314.     lbzu    y,1(py1)
  315.     li    d,0
  316.     subi    y,y,16
  317.     lis    r3,76309@h
  318.     ori    r3,r3,76309@l
  319.     mullw    y,y,r3
  320.     mullw    r3,crv,v
  321.     add    r3,r3,y
  322.     add    r3,r3,c32768
  323.     srawi    r0,r3,16
  324.     lbzx    r3,Clip,r0
  325.     rlwimi    d,r3,24,0,4
  326.     mullw    r3,cgu,u
  327.     mullw    r0,cgv,v
  328.     sub    r3,y,r3
  329.     sub    r3,r3,r0
  330.     add    r3,r3,c32768
  331.     srawi    r0,r3,16
  332.     lbzx    r3,Clip,r0
  333.     rlwimi    d,r3,19,5,10
  334.     mullw    r3,cbu,u
  335.     add    r3,r3,y
  336.     add    r3,r3,c32768
  337.     srawi    r0,r3,16
  338.     lbzx    r3,Clip,r0
  339.     rlwimi    d,r3,13,11,15
  340.  
  341.     lbzu    y,1(py1)
  342.     subi    y,y,16
  343.     lis    r3,76309@h
  344.     ori    r3,r3,76309@l
  345.     mullw    y,y,r3
  346.     mullw    r3,crv,v
  347.     add    r3,r3,y
  348.     add    r3,r3,c32768
  349.     srawi    r0,r3,16
  350.     lbzx    r3,Clip,r0
  351.     rlwimi    d,r3,8,16,20
  352.     mullw    r3,cgu,u
  353.     mullw    r0,cgv,v
  354.     sub    r3,y,r3
  355.     sub    r3,r3,r0
  356.     add    r3,r3,c32768
  357.     srawi    r0,r3,16
  358.     lbzx    r3,Clip,r0
  359.     rlwimi    d,r3,3,21,26
  360.     mullw    r3,cbu,u
  361.     add    r3,r3,y
  362.     add    r3,r3,c32768
  363.     srawi    r0,r3,16
  364.     lbzx    r3,Clip,r0
  365.     rlwimi    d,r3,29,27,31
  366.     stw    d,0(fb)
  367.  
  368.     lbzu    y,1(py2)
  369.     li    d,0
  370.     subi    y,y,16
  371.     lis    r3,76309@h
  372.     ori    r3,r3,76309@l
  373.     mullw    y,y,r3
  374.     mullw    r3,crv,v
  375.     add    r3,r3,y
  376.     add    r3,r3,c32768
  377.     srawi    r0,r3,16
  378.     lbzx    r3,Clip,r0
  379.     rlwimi    d,r3,24,0,4
  380.     mullw    r3,cgu,u
  381.     mullw    r0,cgv,v
  382.     sub    r3,y,r3
  383.     sub    r3,r3,r0
  384.     add    r3,r3,c32768
  385.     srawi    r0,r3,16
  386.     lbzx    r3,Clip,r0
  387.     rlwimi    d,r3,19,5,10
  388.     mullw    r3,cbu,u
  389.     add    r3,r3,y
  390.     add    r3,r3,c32768
  391.     srawi    r0,r3,16
  392.     lbzx    r3,Clip,r0
  393.     rlwimi    d,r3,13,11,15
  394.  
  395.     lbzu    y,1(py2)
  396.     subi    y,y,16
  397.     lis    r3,76309@h
  398.     ori    r3,r3,76309@l
  399.     mullw    y,y,r3
  400.     mullw    r3,crv,v
  401.     add    r3,r3,y
  402.     add    r3,r3,c32768
  403.     srawi    r0,r3,16
  404.     lbzx    r3,Clip,r0
  405.     rlwimi    d,r3,8,16,20
  406.     mullw    r3,cgu,u
  407.     mullw    r0,cgv,v
  408.     sub    r3,y,r3
  409.     sub    r3,r3,r0
  410.     add    r3,r3,c32768
  411.     srawi    r0,r3,16
  412.     lbzx    r3,Clip,r0
  413.     rlwimi    d,r3,3,21,26
  414.     mullw    r3,cbu,u
  415.     add    r3,r3,y
  416.     add    r3,r3,c32768
  417.     srawi    r0,r3,16
  418.     lbzx    r3,Clip,r0
  419.     rlwimi    d,r3,29,27,31
  420.     stwx    d,fb,bpr
  421.  
  422.     addi    fb,fb,4            # next column
  423.     bdnz    .colloop16
  424.  
  425.     add    fb,fb,modulo        # next row
  426.     subic.    height,height,1
  427.     add    py1,py1,width
  428.     add    py2,py2,width
  429.     bne    .rowloop16
  430.  
  431.     lwz    r22,24(r1)
  432.     lwz    r23,28(r1)
  433.     lwz    r24,32(r1)
  434.     lwz    r25,36(r1)
  435.     lwz    r26,40(r1)
  436.     lwz    r27,44(r1)
  437.     lwz    r28,48(r1)
  438.     lwz    r29,52(r1)
  439.     lwz    r30,56(r1)
  440.     lwz    r31,60(r1)
  441.     addi    r1,r1,64
  442.     blr
  443.  
  444.  
  445.     .globl    _WriteFrame32
  446. _WriteFrame32:
  447. # r3 = source ptr array: *src[3]
  448. # r4 = CGfx frame buffer
  449. # r5 = src width
  450. # r6 = src height
  451. # r7 = Cgfx bytes per row
  452. # r8 = Cgfx modulo
  453.  
  454.     .set    fb,r4
  455.     .set    width,r5
  456.     .set    height,r6
  457.     .set    bpr,r7
  458.     .set    modulo,r8
  459.     .set    py1,r9
  460.     .set    py2,r10
  461.     .set    pu,r11
  462.     .set    pv,r12
  463.     .set    d,r22
  464.     .set    c32768,r23
  465.     .set    Clip,r24
  466.     .set    y,r25
  467.     .set    u,r26
  468.     .set    v,r27
  469.     .set    crv,r28
  470.     .set    cbu,r29
  471.     .set    cgu,r30
  472.     .set    cgv,r31
  473.  
  474.     stwu    r1,-64(r1)
  475.     srwi    height,height,1
  476.     stw    r22,24(r1)
  477.     stw    r23,28(r1)
  478.     stw    r24,32(r1)
  479.     stw    r25,36(r1)
  480.     stw    r26,40(r1)
  481.     stw    r27,44(r1)
  482.     stw    r28,48(r1)
  483.     stw    r29,52(r1)
  484.     stw    r30,56(r1)
  485.     stw    r31,60(r1)
  486.     lis    c32768,32768@h
  487.     lwz    py1,0(r3)
  488.     ori    c32768,c32768,32768@l
  489.     lwz    pu,4(r3)
  490.     add    modulo,modulo,bpr
  491.     lwz    pv,8(r3)
  492.     subi    py1,py1,1
  493.     lwz    crv,_crv(r2)
  494.     subi    pu,pu,1
  495.     lwz    cbu,_cbu(r2)
  496.     subi    pv,pv,1
  497.     lwz    cgu,_cgu(r2)
  498.     add    py2,py1,width
  499.     lwz    cgv,_cgv(r2)
  500.     lwz    Clip,_Clip(r2)
  501.  
  502. .rowloop32:
  503.     srwi    r0,width,1
  504.     mtctr    r0
  505.  
  506. .colloop32:
  507.     lbzu    u,1(pu)
  508.     lbzu    v,1(pv)
  509.     subi    u,u,128
  510.     subi    v,v,128
  511.  
  512.     lbzu    y,1(py1)
  513.     li    d,0
  514.     subi    y,y,16
  515.     lis    r3,76309@h
  516.     ori    r3,r3,76309@l
  517.     mullw    y,y,r3
  518.     mullw    r3,crv,v
  519.     add    r3,r3,y
  520.     add    r3,r3,c32768
  521.     srawi    r0,r3,16
  522.     lbzx    r3,Clip,r0
  523.     rlwimi    d,r3,16,8,15
  524.     mullw    r3,cgu,u
  525.     mullw    r0,cgv,v
  526.     sub    r3,y,r3
  527.     sub    r3,r3,r0
  528.     add    r3,r3,c32768
  529.     srawi    r0,r3,16
  530.     lbzx    r3,Clip,r0
  531.     rlwimi    d,r3,8,16,23
  532.     mullw    r3,cbu,u
  533.     add    r3,r3,y
  534.     add    r3,r3,c32768
  535.     srawi    r0,r3,16
  536.     lbzx    r3,Clip,r0
  537.     rlwimi    d,r3,0,24,31
  538.     stw    d,0(fb)
  539.  
  540.     lbzu    y,1(py1)
  541.     subi    y,y,16
  542.     lis    r3,76309@h
  543.     ori    r3,r3,76309@l
  544.     mullw    y,y,r3
  545.     mullw    r3,crv,v
  546.     add    r3,r3,y
  547.     add    r3,r3,c32768
  548.     srawi    r0,r3,16
  549.     lbzx    r3,Clip,r0
  550.     rlwimi    d,r3,16,8,15
  551.     mullw    r3,cgu,u
  552.     mullw    r0,cgv,v
  553.     sub    r3,y,r3
  554.     sub    r3,r3,r0
  555.     add    r3,r3,c32768
  556.     srawi    r0,r3,16
  557.     lbzx    r3,Clip,r0
  558.     rlwimi    d,r3,8,16,23
  559.     mullw    r3,cbu,u
  560.     add    r3,r3,y
  561.     add    r3,r3,c32768
  562.     srawi    r0,r3,16
  563.     lbzx    r3,Clip,r0
  564.     rlwimi    d,r3,0,24,31
  565.     stw    d,4(fb)
  566.  
  567.     lbzu    y,1(py2)
  568.     li    d,0
  569.     subi    y,y,16
  570.     lis    r3,76309@h
  571.     ori    r3,r3,76309@l
  572.     mullw    y,y,r3
  573.     mullw    r3,crv,v
  574.     add    r3,r3,y
  575.     add    r3,r3,c32768
  576.     srawi    r0,r3,16
  577.     lbzx    r3,Clip,r0
  578.     rlwimi    d,r3,16,8,15
  579.     mullw    r3,cgu,u
  580.     mullw    r0,cgv,v
  581.     sub    r3,y,r3
  582.     sub    r3,r3,r0
  583.     add    r3,r3,c32768
  584.     srawi    r0,r3,16
  585.     lbzx    r3,Clip,r0
  586.     rlwimi    d,r3,8,16,23
  587.     mullw    r3,cbu,u
  588.     add    r3,r3,y
  589.     add    r3,r3,c32768
  590.     srawi    r0,r3,16
  591.     lbzx    r3,Clip,r0
  592.     rlwimi    d,r3,0,24,31
  593.     stwux    d,fb,bpr
  594.  
  595.     lbzu    y,1(py2)
  596.     subi    y,y,16
  597.     lis    r3,76309@h
  598.     ori    r3,r3,76309@l
  599.     mullw    y,y,r3
  600.     mullw    r3,crv,v
  601.     add    r3,r3,y
  602.     add    r3,r3,c32768
  603.     srawi    r0,r3,16
  604.     lbzx    r3,Clip,r0
  605.     rlwimi    d,r3,16,8,15
  606.     mullw    r3,cgu,u
  607.     mullw    r0,cgv,v
  608.     sub    r3,y,r3
  609.     sub    r3,r3,r0
  610.     add    r3,r3,c32768
  611.     srawi    r0,r3,16
  612.     lbzx    r3,Clip,r0
  613.     rlwimi    d,r3,8,16,23
  614.     mullw    r3,cbu,u
  615.     add    r3,r3,y
  616.     add    r3,r3,c32768
  617.     srawi    r0,r3,16
  618.     lbzx    r3,Clip,r0
  619.     rlwimi    d,r3,0,24,31
  620.     stw    d,4(fb)
  621.  
  622.     sub    fb,fb,bpr        # next column
  623.     addi    fb,fb,8
  624.     bdnz    .colloop32
  625.  
  626.     add    fb,fb,modulo        # next row
  627.     subic.    height,height,1
  628.     add    py1,py1,width
  629.     add    py2,py2,width
  630.     bne    .rowloop32
  631.  
  632.     lwz    r22,24(r1)
  633.     lwz    r23,28(r1)
  634.     lwz    r24,32(r1)
  635.     lwz    r25,36(r1)
  636.     lwz    r26,40(r1)
  637.     lwz    r27,44(r1)
  638.     lwz    r28,48(r1)
  639.     lwz    r29,52(r1)
  640.     lwz    r30,56(r1)
  641.     lwz    r31,60(r1)
  642.     addi    r1,r1,64
  643.     blr
  644.  
  645.  
  646.     .globl    _yuv2pip
  647. _yuv2pip:
  648. # r3 = *address
  649. # r4 = **srcbuffer
  650. # r5 = x
  651. # r6 = y
  652. # r7 = br
  653.  
  654.     stwu    r1,-48(r1)
  655.     stw    r14,24(r1)
  656.     stw    r15,28(r1)
  657.     stw    r16,32(r1)
  658.     stw    r17,36(r1)
  659.     stw    r18,40(r1)
  660.     stw    r19,44(r1)
  661.  
  662.     subi    r3,r3,4
  663.     lwz    r14,0(r4)
  664.     addi    r5,r5,1
  665.     addi    r6,r6,1
  666.     lwz    r15,4(r4)
  667.     subi    r14,r14,2
  668.     lwz    r16,8(r4)
  669.     subi    r15,r15,1
  670.     subi    r16,r16,1
  671.  
  672. piploop1:
  673.     mtctr    r5
  674.     mr    r9,r15
  675.     mr    r10,r16
  676. piploop2:
  677.     lhzu    r17,2(r14)
  678.     mr    r18,r17
  679.     li    r12,255
  680.     and    r17,r17,r12
  681.     add    r17,r17,r7
  682.     cmpwi    r17,255
  683.     ble    pipfok
  684.     li    r17,255
  685. pipfok:
  686.     cmpwi    r17,0
  687.     bge    pipfok2
  688.     li    r17,0
  689. pipfok2:
  690.     rlwinm    r18,r18,32-8,8,31
  691.     add    r18,r18,r7
  692.     cmpwi    r18,255
  693.     ble    pipfok1
  694.     li    r18,255
  695. pipfok1:
  696.     cmpwi    r18,0
  697.     bge    pipfok3
  698.     li    r18,0
  699. pipfok3:
  700.     lbzu    r19,1(r15)
  701.     lbzu    r11,1(r16)
  702.     rlwinm    r18,r18,8,16,23
  703.     or    r18,r18,r19
  704.     rlwinm    r18,r18,16,0,16
  705.     rlwinm    r17,r17,8,16,23
  706.     or    r17,r17,r11
  707.     or    r17,r17,r18
  708.     stwu    r17,4(r3)
  709.     bdnz    piploop2
  710.  
  711.     mr    r15,r9
  712.     mr    r16,r10
  713.     mtctr    r5
  714. piploop3:
  715.     lhzu    r17,2(r14)
  716.     mr    r18,r17
  717.     li    r12,255
  718.     and    r17,r17,r12
  719.     add    r17,r17,r7
  720.     cmpwi    r17,255
  721.     ble    pipok4
  722.     li    r17,255
  723. pipok4:
  724.     cmpwi    r17,0
  725.     bge    pipok5
  726.     li    r17,0
  727. pipok5:
  728.     rlwinm    r18,r18,32-8,8,31
  729.     add    r18,r18,r7
  730.     cmpwi    r18,255
  731.     ble    pipok6
  732.     li    r18,255
  733. pipok6:
  734.     cmpwi    r18,0
  735.     bge    pipok7
  736.     li    r18,0
  737. pipok7:
  738.     lbzu    r19,1(r15)
  739.     lbzu    r11,1(r16)
  740.     rlwinm    r18,r18,8,16,23
  741.     or    r18,r18,r19
  742.     rlwinm    r18,r18,16,0,16
  743.     rlwinm    r17,r17,8,16,23
  744.     or    r17,r17,r11
  745.     or    r17,r17,r18
  746.     stwu    r17,4(r3)
  747.     bdnz    piploop3
  748.  
  749.     subic.    r6,r6,1
  750.     bne    piploop1
  751.  
  752.     lwz    r14,24(r1)
  753.     lwz    r15,28(r1)
  754.     lwz    r16,32(r1)
  755.     lwz    r17,36(r1)
  756.     lwz    r18,40(r1)
  757.     lwz    r19,44(r1)
  758.     addi    r1,r1,48
  759.     blr
  760.